package com.dhecp.project.business.service;

import java.util.List;
import java.util.Map;

import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.project.business.domain.ProductActive;
import com.dhecp.project.business.domain.ProductActiveCompete;
import com.dhecp.project.business.domain.ProductActiveComponent;

/**
 * Listing库  业务层
 * @author DH-Xxj
 * @version 2022年8月12日
 */
public interface ProductListingService {
	
	/**
     * 查询商品库
	 * @param params
	 * @return List - ProductActive
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActive> queryProductActive(Map<String, Object> params) throws Exception;

	List<ProductActive> list2(Map<String, Object> params) throws Exception;

	/**
     * 查询商品子件
	 * @param params
	 * @return List - ProductActiveComponent
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> queryProductActiveComponent(Map<String, Object> params) throws Exception;
	
	/**
     * 查询商品竞品库
	 * @param params
	 * @return List - ProductActiveCompete
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActiveCompete> queryProductActiveCompete(Map<String, Object> params) throws Exception;
	
	/**
	 * 通过guid查询单条商品库
	 * @param guid
	 * @return 实体 ProductActive
	 * @author DH-Xxj
	 */
	ProductActive queryProductActiveByGuid(String guid);
	
	/**
	 * 通过guid查询单条商品子件
	 * @param guid
	 * @return 实体 ProductActiveComponent
	 * @author DH-Xxj
	 */
	ProductActiveComponent queryProductActiveComponentByGuid(String guid);
	
	/**
	 * 通过guid查询单条商品竞品库
	 * @param guid
	 * @return 实体 ProductActiveCompete
	 * @author DH-Xxj
	 */
	ProductActiveCompete queryProductActiveCompeteByGuid(String guid);
	
	/**
	 * 通过pcode查询商品子件
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductActiveComponent
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> queryProductActiveComponentBypcode(String pcode);
	
	/**
	 * 通过pcode查询商品竞品库
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductActiveCompete
	 * @author DH-Xxj
	 */
	List<ProductActiveCompete> queryProductActiveCompeteBypcode(String pcode);

	/**
	 * 通过pcode查询基础商品子件 (多条)
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductActiveComponent
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> queryProductActiveComponentBypcode2(Map<String, Object> params) throws Exception;

	/**
	 * 查询已选择的数据
	 * @param params
	 * @return
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActive> queryProductActiveList(Map<String, Object> params) throws Exception;

	/**
	 * 显示所有listing库
	 */
	List<ProductActive> listAll();
	
	/**
	 * 查询已选择的数据子件
	 * @param params
	 * @return
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> queryProductActiveComponentList(Map<String, Object> params) throws Exception;

	/**
	 * 新增商品库
	 * @param productActiveItems 必要参数：商品库对应实体类（ProductActive）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertProductActive(Map<String, Object> params);

	/**
	 * 新增商品子件
	 * @param productActiveComponentItems 必要参数：商品子件对应实体类（ProductActiveComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertProductActiveComponent(Map<String, Object> params);

	/**
	 * 新增商品竞品库
	 * @param productActiveCompeteItems 必要参数：商品竞品库对应实体类（ProductActiveCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult insertProductActiveCompete(Map<String, Object> params);

	/**
	 * 保存商品子件（先删除后新增）
	 * @param pcode 必要参数：商品库中的商品编码（code）
	 * @param productActiveComponentItems 必要参数：商品子件对应实体类（ProductActiveComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult saveProductActiveComponent(Map<String, Object> params);

	/**
	 * 保存商品竞品库（先删除后新增）
	 * @param pcode 必要参数：商品库中的商品编码（code）
	 * @param productActiveCompeteItems 必要参数：商品竞品库对应实体类（ProductActiveCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult saveProductActiveCompete(Map<String, Object> params);
	
	/**
	 * 修改商品库
	 * @param productActiveItems 必要参数：商品库对应实体类（ProductActive）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateProductActive(Map<String, Object> params);
	
	/**
	 * 修改商品子件
	 * @param productActiveComponentItems 必要参数：商品子件对应实体类（ProductActiveComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateProductActiveComponent(Map<String, Object> params);
	
	/**
	 * 修改商品竞品库
	 * @param productActiveCompeteItems 必要参数：商品竞品库对应实体类（ProductActiveCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult updateProductActiveCompete(Map<String, Object> params);
	
	/**
	 * 通过Guid删除商品库
	 * @param productActiveItems 必要参数：商品库对应实体类（ProductActive）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductActiveByGuid(Map<String, Object> params);
	
	/**
	 * 通过Guid删除商品库（完整删除，包含子件和竞品）
	 * @param productActiveItems 必要参数：商品库对应实体类（ProductActive）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductActiveCompleteByGuid(Map<String, Object> params);
	
	/**
	 * 通过Guid删除商品子件
	 * @param productActiveComponentItems 必要参数：商品子件对应实体类（ProductActiveComponent）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductActiveComponentByGuid(Map<String, Object> params);
	
	/**
	 * 通过Guid删除商品竞品库
	 * @param productActiveCompeteItems 必要参数：商品竞品库对应实体类（ProductActiveCompete）的json格式字符串
	 * @return
	 * @author DH-Xxj
	 */
	AjaxResult deleteProductActiveCompeteByGuid(Map<String, Object> params);
	
	/**
	 * 从商品库调入
	 * @param params
	 * @return List - ProductActive
	 * @throws Exception
	 * @author DH-Xxj
	 */
	List<ProductActive> queryCallProductXG(Map<String, Object> params) throws Exception;

}
